﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CasaBella.Entities;
using System.Data.Objects;
using System.Data;

namespace CasaBella.Repository
{
    public class ClienteJuridicoRepository:MasterRepository,IClienteJuridicoRepository
    {
        public List<CLIENTE_JURIDICO> GetAllFromClienteJuridico()
        {
            var query = from c in context.CLIENTE_JURIDICO.Include("CLIENTE")
                        select c;
            return query.ToList();
        }

        public List<CLIENTE_JURIDICO> GetAllFromClienteJuridicoByCriterio(string criterio)
        {
            var query = from e in context.CLIENTE_JURIDICO.Include("CLIENTE")
                        select e;
            if (criterio != null && criterio != string.Empty && criterio != "")
            {
                query = from e in context.CLIENTE_JURIDICO.Include("CLIENTE")
                        where e.Ruc.Contains(criterio) ||
                                   e.RazonSocial.ToUpper().Contains(criterio)
                        select e;
            }
            return query.ToList();
        }

        public CLIENTE_JURIDICO GetAllFromClienteJuridicoByRuc(string ruc)
        {
            var query = from c in context.CLIENTE_JURIDICO.Include("CLIENTE")
                        where c.Ruc.CompareTo(ruc) == 0
                        select c;
            return query.SingleOrDefault();
        }

        public void AddClienteJiridico(CLIENTE_JURIDICO cliJuridico)
        {
            //guardando TELEFONOS DEL CLIENTE
            foreach (var item in cliJuridico.CLIENTE.TELEFONOS_CLIENTE)
            {
                item.OPERADOR = null;
                context.Entry(item).State = EntityState.Added;
            }
            cliJuridico.CLIENTE.CLIENTE_JURIDICO = null;
            cliJuridico.CLIENTE.CLIENTE_NATURAL = null;

            context.CLIENTE_JURIDICO.Add(cliJuridico);
            context.SaveChanges();
        }

        public void UpdateClienteJuridico(CLIENTE_JURIDICO cliJuridico)
        {
            var clienteJuridicoDB = (from c in context.CLIENTE_JURIDICO.Include("CLIENTE")
                                     where c.Id.Equals(cliJuridico.Id)
                                     select c).SingleOrDefault();

            clienteJuridicoDB.RazonSocial = cliJuridico.RazonSocial;
            clienteJuridicoDB.Ruc = cliJuridico.Ruc;
            clienteJuridicoDB.CLIENTE.Comentario = cliJuridico.CLIENTE.Comentario;
            clienteJuridicoDB.CLIENTE.Direccion = cliJuridico.CLIENTE.Direccion;
            clienteJuridicoDB.CLIENTE.Email = cliJuridico.CLIENTE.Email;

            //editando los TELEFONOS DEL CLIENTE
            foreach (var item in cliJuridico.CLIENTE.TELEFONOS_CLIENTE)
            {
                item.OPERADOR = null;
                item.CLIENTE = null;
                if (item.Id.Equals(0))
                {
                    item.CLIENTE = clienteJuridicoDB.CLIENTE;
                    item.OPERADOR = context.OPERADORs.Find(item.IdOperador);
                    context.Entry(item).State = EntityState.Added;
                    clienteJuridicoDB.CLIENTE.TELEFONOS_CLIENTE.Add(item);
                }
                else
                {
                    context.TELEFONOS_CLIENTE.Attach(item);
                    context.Entry(item).State = System.Data.EntityState.Modified;
                    item.CLIENTE = null;
                }
            }
            context.Entry(clienteJuridicoDB.CLIENTE).State = EntityState.Modified;
            context.Entry(clienteJuridicoDB).State = EntityState.Modified;
            context.SaveChanges();
        }
    }
}
